#include<bits/stdc++.h>
#define int long long
using namespace std;

int T,n,m,l,v;
const int N=1e5+10;
struct s1
{
    double d,vn,a;
}va[N];

int vp[N];
double minn=1e18;
double maxn=0;


int check(int now)
{
    if(va[now].a<0)
    {
        if(va[now].vn<=v)
        {
            return 0;
        }
        else
        {
            double s=((va[now].vn * va[now].vn)-(v*v))*1.0/(va[now].a*2*(-1));
            for(int i=1;i<=m;i++)
            {
                if(vp[i]>=va[now].d && vp[i]<va[now].d+s)
                {
                    minn=min(minn,va[now].d);
                    maxn=max(maxn,va[now].d+s-0.0000001);
                    return 1;
                }
            }
        }
    }
    else if(va[now].a==0)
    {
        if(va[now].vn<=v) return 0;
        else
        {
            for(int i=1;i<=m;i++)
            {
                if(vp[i]>=va[now].d)
                {
                    minn=max(minn,va[now].d);
                    return 1;
                }
            }
        }
    }
    else if(va[now].a>0)
    {
        if(va[now].vn<=v)
        {
            int suc=0;
            double s=((v*v)-(va[now].vn * va[now].vn))*1.0/(va[now].a*2);
            for(int i=1;i<=m;i++)
            {
                if(vp[i]>va[now].d+s)
                {
                    minn=max(minn,va[now].d+s+0.000001);
                    return 1;
                }
            }
        }
        else
        {
            for(int i=1;i<=m;i++)
            {
                if(vp[i]>=va[now].d)
                {
                    minn=max(minn,va[now].d);
                    return 1;
                }
            }
        }
    }
    return 0;
}

signed main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    cin>>T;
    while(T--)
    {
        int q=1;
        cin>>n>>m>>l>>v;
        for(int i=1;i<=n;i++)
        {
            cin>>va[i].d>>va[i].vn>>va[i].a;
            if(va[i].a!=0) q=0;
        }
        for(int i=1;i<=m;i++)
        {
            cin>>vp[i];
        }
        int sum=0;
        for(int i=1;i<=n;i++)
        {
            sum+=check(i);
        }
        cout<<sum<<" ";
        int x=0;
        if(q) cout<<1<<"\n";
        else
        {
            for(int i=1;i<=m;i++)
            {
                if(vp[i]>=minn && vp[i]<=maxn) x++;
            }
            cout<<x<<"\n";
        }

    }
    return 0;
}
